<?php 
/**
  * 网站公共控制器
  * date 2013-1-26 
  */
class PublicAction extends Action {

  public function index()
  {
    if(!isset($_SESSION[C('USER_AUTH_KEY')]))
    {
      $this->error('请先登陆',U('Public/login'));
    }
    $info = array(
      '运行环境'=>$_SERVER["SERVER_SOFTWARE"],
      'PHP运行方式'=>php_sapi_name(),
      '上传附件限制'=>ini_get('upload_max_filesize'),
      '执行时间限制'=>ini_get('max_execution_time').'秒',
      '服务器时间'=>date("Y年n月j日 H:i:s"),
      '北京时间'=>gmdate("Y年n月j日 H:i:s",time()+8*3600),
      '服务器域名/IP'=>$_SERVER['SERVER_NAME'].' [ '.gethostbyname($_SERVER['SERVER_NAME']).' ]',
      '剩余空间'=>round((@disk_free_space(".")/(1024*1024)),2).'M',
      'register_globals'=>get_cfg_var("register_globals")=="1" ? "ON" : "OFF",
      'magic_quotes_gpc'=>(1===get_magic_quotes_gpc())?'YES':'NO',
      'magic_quotes_runtime'=>(1===get_magic_quotes_runtime())?'YES':'NO',
    );
    $this->getNewCount();
    $this->assign('info',$info);
    $this->assign('options',F('cache_Options','',C('MY_CACHE')));    
    $this->assign('menu',$this->menu());
    $this->display('index');
  }

  private function getNewCount()
  {
    $this->assign('msgCount',M('Message')->where(array('status'=>0,'reply_time'=>0))->count());
    //$this->assign('orderCount',M('OrderInfo')->where(array('order_status'=>0,'pay_status'=>0,'shipping_status'=>0))->count());
    $this->assign('commentCount',M('Comment')->where(array('status'=>0,'parent_id'=>0))->count());        
  }

/**
 * 登陆
 * @access public
 */
  public function login()
  {
    if(isset($_SESSION[C('USER_AUTH_KEY')]))
    {
        $this->success('已经登陆!',U('Public/index'));
    }else{$this->display();}
  }

  public function checkLogin()
  {
      if($_SESSION['verify']!= md5($_POST['verify']))
      {
        $this->error('验证码错误！');
      }
      if(empty($_POST['username']))
      {
        $this->error('帐号错误！');
      }
      elseif (empty($_POST['password']))
      {
        $this->error('密码必须！');
      }
      $map=array();
      $map['username']=$_POST['username'];
      $map['status']=1;
      import('@.ORG.RBAC');
      $authInfo=RBAC::authenticate($map);    
      if(false === $authInfo)
      {
          $this->error('帐号不存在或已禁用!');
      }else
          {
            if($authInfo['password']!= md5($_POST['password']))$this->error('密码错误!');
            $_SESSION[C('USER_AUTH_KEY')]=$authInfo['id'];
            $_SESSION['username']=$authInfo['username'];
            $_SESSION['role']=$authInfo['role_id'];
            $_SESSION['email']=$authInfo['email'];
            $_SESSION['truename']=$authInfo['true_name'];
            if($authInfo['is_super']==1)$_SESSION['administrator']= true;
            RBAC::saveAccessList();
            $this->success('登录成功!',U('Public/index'));
          }     
  }

  public function loginOut()
  {
    if(isset($_SESSION[C('USER_AUTH_KEY')]))
    {
      unset($_SESSION[C('USER_AUTH_KEY')]);
      unset($_SESSION);
      session_destroy();
      $this->success('登出成功!',U('Public/login'));
    }else
        {
          $this->error('已经登出！',U('Public/login'));
        }
  }  


  /*验证码*/
  public function verify()
  {
    $type =isset($_GET['type'])?$_GET['type']:'gif';
    import("@.ORG.Image");
    Image::buildImageVerify(4,1,$type);
  }  

/**
* 用于产品图集上传图片
* 文件保存目录/uploadfile/gallery/
* 缩略图目录/uploadfile/thumb/
* @return json
*/
  public function uploadByProductGallery()
  {
    import('@.ORG.MyUploadFile');
    $upload=new MyUploadFile('gallery',C('GALLERY_THUMB_SIZE'),false);
    $upload->run_upload();
    $picInfo=$upload->getUploadFileInfo();
    header('Content-type: text/html; charset=UTF-8');
    echo $picInfo[0]["savename"];
    exit;
  }

/**
* 用于编辑器上传图片
* 文件保存目录/uploadfile/upload/
* @return json
*/
	public function uploadByEditor()
  {
    import('@.ORG.MyUploadFile');
    $upload=new MyUploadFile();
    $upload->run_upload();
    $picInfo=$upload->getUploadFileInfo();
    header('Content-type: text/html; charset=UTF-8');
    if(is_array($picInfo))
    {
      echo json_encode(array('error' => 0, 'url' =>'/uploadfile/upload/'.$picInfo[0]['savename']));
    }else
        {
          echo json_encode(array('error' => 1, 'message' => $picInfo));
        }
    exit;
  }

  /**
   * 用于编辑器管理图片
   * 文件式浏览方式
   * @return json
   */
  public function fileManagerByEditor()
  {
    $php_path =C('ROOT_PATH');
    $root_path = $php_path . '../uploadfile/';
    $root_url = '/uploadfile/';
    //图片扩展名
    $ext_arr = array('gif', 'jpg', 'jpeg', 'png', 'bmp');
    //目录名
    $dir_name ='';
    if (!in_array($dir_name, array('','gallery','thumb','original','flash','media','file')))
    {
      echo "Invalid Directory name.";
      exit;
    }
    if($dir_name !== '')
    {
      $root_path .= $dir_name . "/";
      $root_url .= $dir_name . "/";
      if (!file_exists($root_path))
      {
        mkdir($root_path);
      }
    } 
    //根据path参数，设置各路径和URL
    if (empty($_GET['path']))
    {
      $current_path = realpath($root_path) . '/';
      $current_url = $root_url;
      $current_dir_path = '';
      $moveup_dir_path = '';
    }else
        {
          $current_path = realpath($root_path) . '/' . $_GET['path'];
          $current_url = $root_url . $_GET['path'];
          $current_dir_path = $_GET['path'];
          $moveup_dir_path = preg_replace('/(.*?)[^\/]+\/$/', '$1', $current_dir_path);
        }
    echo realpath($root_path);
    //排序形式，name or size or type
    $order = empty($_GET['order']) ? 'name' : strtolower($_GET['order']);

    //不允许使用..移动到上一级目录
    if (preg_match('/\.\./', $current_path))
    {
      echo 'Access is not allowed.';
      exit;
    }
    //最后一个字符不是/
    if (!preg_match('/\/$/', $current_path))
    {
      echo 'Parameter is not valid.';
      exit;
    }
    //目录不存在或不是目录
    if (!file_exists($current_path) || !is_dir($current_path))
    {
      echo 'Directory does not exist.';
      exit;
    }
    //遍历目录取得文件信息
    $file_list = array();
    if($handle = opendir($current_path))
    {
      $i = 0;
      while (false !== ($filename = readdir($handle)))
      {
        if ($filename{0} == '.') continue;
        $file = $current_path . $filename;
        if(is_dir($file))
        {
          $file_list[$i]['is_dir'] = true; //是否文件夹
          $file_list[$i]['has_file'] = (count(scandir($file)) > 2); //文件夹是否包含文件
          $file_list[$i]['filesize'] = 0; //文件大小
          $file_list[$i]['is_photo'] = false; //是否图片
          $file_list[$i]['filetype'] = ''; //文件类别，用扩展名判断
        }else
            {
              $file_list[$i]['is_dir'] = false;
              $file_list[$i]['has_file'] = false;
              $file_list[$i]['filesize'] = filesize($file);
              $file_list[$i]['dir_path'] = '';
              $file_ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
              $file_list[$i]['is_photo'] = in_array($file_ext, $ext_arr);
              $file_list[$i]['filetype'] = $file_ext;
            }
        $file_list[$i]['filename'] = $filename; //文件名，包含扩展名
        $file_list[$i]['datetime'] = date('Y-m-d H:i:s', filemtime($file)); //文件最后修改时间
        $i++;
      }
      closedir($handle);
    }
    //排序
    function cmp_func($a,$b)
    {
      global $order;
      if($a['is_dir'] && !$b['is_dir'])
      {
        return -1;
      }else if(!$a['is_dir'] && $b['is_dir'])
        {
          return 1;
        }else
            {
              if ($order == 'size')
              {
                  if ($a['filesize'] > $b['filesize']) 
                  {
                    return 1;
                  }else if($a['filesize'] < $b['filesize'])
                    {
                      return -1;
                    }else
                        {
                          return 0;
                        }
              }else if($order == 'type')
                  {
                    return strcmp($a['filetype'], $b['filetype']);
                  }else
                      {
                        return strcmp($a['filename'], $b['filename']);
                      }
            }
    }
    usort($file_list, 'cmp_func');
    $result = array();
    //相对于根目录的上一级目录
    $result['moveup_dir_path'] = $moveup_dir_path;
    //相对于根目录的当前目录
    $result['current_dir_path'] = $current_dir_path;
    //当前目录的URL
    $result['current_url'] = $current_url;
    //文件数
    $result['total_count'] = count($file_list);
    //文件列表数组
    $result['file_list'] = $file_list;
    header('Content-type: application/json; charset=UTF-8');
    echo json_encode($result);    
  }

  /**
   * 左边公共导航
   */
  public function menu()
  {
    if(isset($_SESSION[C('USER_AUTH_KEY')])) 
    {
      $menu=array();
      if(isset($_SESSION['menu'.$_SESSION[C('USER_AUTH_KEY')]]))
      {
        $menu=$_SESSION['menu'.$_SESSION[C('USER_AUTH_KEY')]];
      }else
          {
            $node=M("Node");
            $where['level']=2;
            $where['status']=1;
            $where['is_show']=1;
            $list =$node->where($where)->field('id,name,title')->order('sort_order asc')->select();
            $accessList = $_SESSION['_ACCESS_LIST'];
            foreach($list as $key=>$module)
            {
              if(isset($accessList[strtoupper(APP_NAME)][strtoupper($module['name'])]) || $_SESSION['administrator'])
              {
                $menu[$key]=$module;
              }
            }
            foreach($menu as $k=>$m)
            {
              $where['level']=3;
              $where['status']=1;
              $where['parent_id']=$m['id'];
              $where['is_show']=1;
              $subList=$node->where($where)->field('id,name,title')->order('sort_order asc')->select();
              foreach($subList as $key=>$sub)
              {
                if(isset($accessList[strtoupper(APP_NAME)][strtoupper($m['name'])][strtoupper($sub['name'])]) || $_SESSION['administrator'])
                {
                  $menu[$k]['sub'][]=$sub;
                }
              }
            }
          }
          $_SESSION['menu'.$_SESSION[C('USER_AUTH_KEY')]] = $menu;
          return $menu;     
    }       
  }  

}	
 ?>